/*
 * Vector2.h
 *
 *  Created on: 2011/06/22
 *      Author: naoki
 */

#ifndef INCLUDED_NTENGINE_MATH_VECTOR2_H
#define INCLUDED_NTENGINE_MATH_VECTOR2_H

namespace NTEngine {
namespace Math {

/**
 * @brief 2Dベクタクラス
 */
class Vector2 {
public:
	float x, y;

	Vector2(){ }
	Vector2(float x, float y);
	Vector2(int x, int y);
	Vector2(const Vector2&);

	void operator=(const Vector2&);
	void operator+=(const Vector2&);
	void operator-=(const Vector2&);
	void operator*=(float);
	void operator/=(float);
	bool operator==(const Vector2&) const;
	bool operator!=(const Vector2&) const;

	/**
	 * @brief
	 */
	void set( float ax, float ay );

	/**
	 * @brief
	 */
	void setAdd( const Vector2& a, const Vector2& b );

	/**
	 * @brief
	 */
	void setSub( const Vector2& a, const Vector2& b );

	/**
	 * @brief
	 */
	float length() const;

	/**
	 * @brief
	 */
	void zero();

	/**
	 * @brief エルミネート補完
	 */
	static void hermite(
			const Vector2& p0, const Vector2& v0, // 始点
			const Vector2& p1, const Vector2& v1, // 終点
			float t, Vector2* out );

	/**
	 * @brief ベジェ補完
	 */
	static void bezier(
		const Vector2& p0,
		const Vector2& p1, const Vector2& p2, // 制御点
		const Vector2& p3,
		float t, Vector2* out);
};

} // namespace Math
} // namespace NTEngine

#endif // INCLUDED_NTENGINE_MATH_VECTOR2_H
